package jmine.tec.web.wicket.pages.form;

import java.io.Serializable;
import java.util.Set;

import jmine.tec.report.impl.ReportBuilder;
import jmine.tec.web.wicket.component.table.SearchResultSelectionTable;

import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.panel.Panel;

import bancosys.tec.persist.Persistable;

/**
 * Implementação base de uma página de listagem e execução de ações sobre objetos selecionados na tabela.
 * 
 * @author Rafael Volpato
 * @date Nov 11, 2011
 * @param <BO> Tipo da entidade exibida na tabela de listagem
 * @param <M> Tipo do model do formulario
 */
public abstract class ExecutePage<M, BO extends Persistable> extends ListPage<M, BO> {

    private Set<Serializable> selectedItens;

    /**
     * Construtor.
     */
    public ExecutePage() {
        super();
    }

    /**
     * Construtor.
     * 
     * @param pageParameters {@link PageParameters}
     */
    public ExecutePage(PageParameters pageParameters) {
        super(pageParameters);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected Panel createSearchResultPanel(String id, ReportBuilder reportBuilder) {
        SearchResultSelectionTable<BO> table = new SearchResultSelectionTable<BO>(id, reportBuilder.createReport(), this);
        this.selectedItens = table.getChosen();
        return table;
    }

    /**
     * Retorna a lista de itens que estão selecionados.
     * 
     * @return a lista de itens que estão selecionados
     */
    protected final Set<Serializable> getSelectedItens() {
        return this.selectedItens;
    }

    /**
     * @param selectedItens the selectedItens to set
     */
    protected void setSelectedItens(Set<Serializable> selectedItens) {
        this.selectedItens = selectedItens;
    }
}
